/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.webhomesites.padrao.presenter;

import br.com.webhomesites.padrao.contracts.IEstoqueProdutoPresenter;
import br.com.webhomesites.padrao.contracts.IGrupoProdutoView;
import br.com.webhomesites.padrao.model.*;
import br.com.webhomesites.padrao.presenter.ProdutoPresenterActionListeners.SairActionListener;
import br.com.webhomesites.padrao.utils.Strategy;
import br.com.webhomesites.padrao.view.BuscarProdutoView;
import br.com.webhomesites.padrao.view.EstoqueProdutoView;
import java.text.DecimalFormat;

/**
 *
 * @author Webhome
 */
public class EstoqueProdutoPresenter implements IEstoqueProdutoPresenter {

    private ProdutoModel produtoModel;
    private ProdutoDAO produtoDAO;
    private EstoqueProdutoView estoqueProdutoView;
    
    private GrupoProdutoModel grupoProdutoModel;
    private GrupoProdutoDAO grupoProdutoDAO;
    private IGrupoProdutoView grupoProdutoView;
    
    public final Strategy INSERT_STRATEGY = new InsertStrategy();
    public final Strategy UPDATE_STRATEGY = new UpdateStrategy();
    private Strategy operacao = INSERT_STRATEGY;
    
    DecimalFormat df = new DecimalFormat("###,###,###.00");
    DecimalFormat df2 = new DecimalFormat("###,###,###.0");

    public EstoqueProdutoPresenter(ProdutoModel produtoModel, EstoqueProdutoView estoqueProdutoView, ProdutoDAO produtoDAO, IGrupoProdutoView grupoProdutoView, GrupoProdutoDAO grupoProdutoDAO, GrupoProdutoModel grupoProdutoModel) {
        this.produtoModel = produtoModel;
        this.estoqueProdutoView = estoqueProdutoView;
        this.produtoDAO = produtoDAO;
        
        this.grupoProdutoModel = grupoProdutoModel;
        this.grupoProdutoView = grupoProdutoView;
        this.grupoProdutoDAO = grupoProdutoDAO;
    }

    @Override
    public void setUpViewListeners() {
        
        estoqueProdutoView.setAlterarActionListener(new EstoqueProdutoPresenterActionListeners.AlterarActionListener(this));
        //estoqueProdutoView.setCancelarActionListener(new CancelarActionListener(this));
        
        estoqueProdutoView.setBtnSairActionListener(new SairActionListener());
        
        
        //estoqueProdutoView.setBuscaAvancadaActionlistener(new EstoqueProdutoPresenterActionListeners.BuscaAvancadaActionlistener(this));
    }

    @Override
    public void updateModelFromView() {        

//        produtoModel.setId(estoqueProdutoView.getCodigo());
//        produtoModel.setDescricao(estoqueProdutoView.getDescricao());
//        produtoModel.setSerie(estoqueProdutoView.getSerie().replace(" ", ""));
//        produtoModel.setPrecoDiario((estoqueProdutoView.getPrecoDiario()));
//        produtoModel.setPrecoSemanal((estoqueProdutoView.getPrecoSemanal()));
//        produtoModel.setPrecoQuinzenal((estoqueProdutoView.getPrecoQuinzenal()));
//        produtoModel.setPrecoMensal((estoqueProdutoView.getPrecoMensal()));
//        produtoModel.setTipo(estoqueProdutoView.getTipo());
//        produtoModel.setUnidade(estoqueProdutoView.getComboUnidade());
//        produtoModel.setQuantidade(estoqueProdutoView.getProdutoQuantidade());
//        grupoProdutoModel = (grupoProdutoDAO.findByDescricaoUnica(estoqueProdutoView.getGrupo()));
//        produtoModel.setGrupoProdutoModel(grupoProdutoModel);
                      
        if(operacao==INSERT_STRATEGY) {
        produtoDAO.save(produtoModel);
        System.out.println("******Listagem do produto inserido");
        System.out.println(produtoModel.toString());
        } else if(operacao==UPDATE_STRATEGY) {
            produtoDAO.update(produtoModel);
        }

    }

    @Override
    public void updateViewFromModel() {
        if (produtoModel != null) {

        estoqueProdutoView.setListaGrupoProduto(grupoProdutoDAO.findAll());    
        estoqueProdutoView.setListaProduto(produtoDAO.findAll());
        

        } else {
            estoqueProdutoView.clearFields();
        }
    }

    @Override
    public void novoEstoqueProduto() {
//        estoqueProdutoView.setCodigo(produtoDAO.getMaxId() + 1);
//        estoqueProdutoView.setGrupo(grupoProdutoDAO.findAll());
//        estoqueProdutoView.setTipoUnicoSelected(true);

        produtoModel = new ProdutoModel();    

    }


    @Override
    public void alterarProduto() {
        this.updateModelFromView();
    }

    @Override
    public void habilitarEdicao(boolean arg) {
//        estoqueProdutoView.enableTxtCodigoGrupoProduto(arg);
//        estoqueProdutoView.enableTxtProduto(arg);
//        estoqueProdutoView.enableTxtProdutoSerie(arg);
//        estoqueProdutoView.enableTxtProdutoPrecoDiario(arg);
//        estoqueProdutoView.enableTxtProdutoPrecoSemanal(arg);
//        estoqueProdutoView.enableTxtProdutoPrecoQuinzenal(arg);
//        estoqueProdutoView.enableTxtProdutoPrecoMensal(arg);
//
//        estoqueProdutoView.enableBtnCancelar(arg);
//        estoqueProdutoView.enableBtnRemover(arg);
//        estoqueProdutoView.enableBtnSalvar(arg);
    }

    @Override
    public EstoqueProdutoView getView() {
        return estoqueProdutoView;
    }

    @Override
    public ProdutoModel getModel() {
        return produtoModel;
    }

    @Override
    public void setView(EstoqueProdutoView estoqueProdutoView) {
        this.estoqueProdutoView = estoqueProdutoView;
    }

    @Override
    public void setModel(ProdutoModel model) {
        this.produtoModel = model;
    }
   
    @Override
    public ProdutoDAO getDAO() {
        return produtoDAO;
    }

    @Override
    public void createView() {
        //this.novoProduto();            
        this.setUpViewListeners();
        //this.habilitarEdicao(false);
        estoqueProdutoView.packAndShow();
    }
    
    @Override
    public void buscaAvancada() {
        
        BuscarProdutoModel buscarProdutoModel = new BuscarProdutoModel();
        
        BuscarProdutoView buscaProdutoView = new BuscarProdutoView(javax.swing.JOptionPane.getFrameForComponent(estoqueProdutoView), true);
                
//        BuscarProdutoPresenter buscarProdutoPresenter = new BuscarProdutoPresenter(this, null, null, null, buscaProdutoView, buscarProdutoModel);   
//        buscarProdutoPresenter.setBuscador(buscarProdutoPresenter.BUSCADOR_PRODUTO_VIEW);
//        buscarProdutoPresenter.createView();
        
    }

    public void setOperacao(Strategy operacao) {
        this.operacao = operacao;
    }

    public Strategy getOperacao() {
        return operacao;
    }

    private class InsertStrategy implements Strategy {

        @Override
        public void execute() {
            //inserirProduto();
        }
    }

    private class UpdateStrategy implements Strategy {

        @Override
        public void execute() {
            alterarProduto();
        }
    }
}
